package top.wfzzq.ds;

import top.wfzzq.tds.MyNode;

/**
 * 队列--->先进先出
 * 
 * @author wanghui
 *
 * @param <T>
 */
public class MyQueue<T> {
	private MyNode<T> head;
	/**
	 * 头节点
	 */
	
	private  MyNode<T> tail;
	/**
	 * 尾节点
	 */
	private int count = 0;
	// 计数

	public boolean isEmpty() {
		return count == 0;
	}

	public int size() {
		return count;
	}

	/**
	 * 查看队列头部元素（作业，实现查看队列尾部元素）
	 * @return
	 */
	public T peek() {
		if (isEmpty()) {
			throw new RuntimeException("队列为空！");
		}
		return head.getData();

	}

	/**
	 * 进队（添加到尾部）
	 * @param data
	 */
	public void offer(T data) {
		MyNode<T> node = new MyNode<>(data);
		if (isEmpty()) {
			// 没有元素的情况下，头尾都是新进的节点
			head = node;
			tail = node;
			count++;
			return;

		}
		tail.setNext(node);
		// 将新节点加到位尾部的next位置
		tail = node;
		// 新进节点变成尾部
		count++;
	}

	/**
	 * 出队---将头移出队列
	 * @return
	 */
	public T poll() {
		if (isEmpty()) {
			throw new RuntimeException("队列为空");
		}
		T data = head.getData();
		// 获取头胡数据
		head = head.getNext();
		// 将头指向next节点
		count--;
		// 计数
		return data;
	}
}
